package com.tedu.API.list;

import org.junit.Test;

import java.util.*;
/**  链表实现的集合     包位置: java.util
 *  list接口集合----三个实现类:
 *  ArrayList  实现类: 数组实现
 *             特点: 查询快【按照下标】、增删慢【改动下标: 元素】
 * LinkedList 实现类: 双向链表实现
 *            特点: 查询慢【按照下标】、增删快【首、尾元素，中间元素】
 *  ArrayList与LinkedList大部分方法完全一致:
 *  添加 add();   获取  get();  删除 remove()
 *  size()    获取集合总数    clear() 清空集合元素
 *
 *  ArrayList与LinkedList不一致的方法:
 *  indexOf()   lastIndexOf
 *  addFirst()
 *  addLast()
 *  removeFirst()
 *  removeLast()
 */
public class LinkedListAPI {
    @Test
    public void testIndexOf(){
        //创建集合--双向链表集合
        List<String> list=new LinkedList<>();
        list.add("佛跳墙");
        list.add("龙井虾仁");
        list.add("珍珠日月贝");
        list.add("鹄羹");
        /**
         * ArrayList与LinkedList通用方法
         * indexOf()   返回值：int
         * 作用：返回指定元素在集合中第一次出现的索引位置
         *      【理解：返回元素的下标位】
         */
        int index=list.indexOf("鹄羹");
        /**
         * LinkedList独有方法
         * LastIndexOf()  返回值：int
         * 作用：返回最后元素在集合中第一次出现的索引位置
         */
        int lastIndex= list.lastIndexOf("鹄羹");
        System.out.println("返回最后元素的下标："+lastIndex);
    }

    /**
     * LinkedList独有方法
     * addFirst()  返回值：void
     * 作用：将指定元素添加至链表头部
     * addLast()  返回值：void
     * 作用：将指定元素添加至链表尾部
     * removeFirst()
     * removeLast()
     */
    @Test
    public void testAR(){
        //创建集合--双向链表集合
        List<String> list=new LinkedList<>();
        list.add("佛跳墙");
        list.add("龙井虾仁");
        list.add("珍珠日月贝");
        list.add("鹄羹");
        //LinkList独有方法
        ((LinkedList)list).addFirst("奶汤锅子鱼");
        ((LinkedList)list).addLast("雪霁羹");
        System.out.println("双向链表："+list);
        ((LinkedList)list).removeFirst();
        System.out.println("双向链表："+list);
    }
}